/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package test3sort; import java.io.BufferedWriter; import java.io.File; import java.io.FileNotFoundException; import java.io.FileWriter; import java.io.IOException; import java.util.Random; import java.util.Scanner; /** * * @author jcmtiernan */ public class Test3sort { /** * @param args the command line arguments */ public static void main(String[] args) throws IOException { final int MAXTEAMS = 150; final int TEAM_NUMBER = 0; final int RANKING_PTS = 1; final int QUALIFYING_PTS = 2; final int TEAM_NUM_MAX = 12000; final int RP_MAX = 90; // assume 45 matches given 2 RP for WIN, 1 RP for tie final int QP_MAX = 12375; // assume max of 275 points per match for 45 matches Integer robotTeamNumbers[] = new Integer[MAXTEAMS]; Integer[][] robotTeamInfo = new Integer[MAXTEAMS][3]; String[][][] regionRobotTeams = new String[4][MAXTEAMS][3]; String inputFileName = "TeamRPQP.dat"; File inputFile = new File(inputFileName); inputFile = makeRandomTeamRPQPFile(inputFile,MAXTEAMS, TEAM_NUM_MAX, RP_MAX, QP_MAX); Scanner input = new Scanner(System.in); Scanner inFile; // exception handling try { inFile = new Scanner(inputFile); } catch (FileNotFoundException fnf) { System.out.println("Input file was not found. Input will be read from the keyboard."); System.out.println("Enter a team number followed by a space then the number of team members " + "followed by a space then the year the team started followed by a space or the enter key."); System.out.println("Enter a 0 for the team number in order to stop."); System.out.println("Team# RankingPt QualPt : "); inFile = new Scanner(System.in); // does not handle invalid data from the keyboard } int i = 0; int j = 0; boolean isGreaterThanZero = true; Integer tempNumber = 0; System.out.println(); j = 0; while( inFile.hasNextInt() ) { //System.out.println("robotTeamNumbers["+j+"] = "+robotTeamNumbers[j]); robotTeamInfo[j][TEAM_NUMBER] = inFile.nextInt(); //System.out.println("Reading team data from file."); robotTeamInfo[j][RANKING_PTS] = inFile.nextInt(); robotTeamInfo[j++][QUALIFYING_PTS] = inFile.nextInt(); } int numTeamsInFile = j; System.out.println(); System.out.println("Data read from the file"); printTeamInfo(robotTeamInfo, numTeamsInFile, TEAM_NUMBER, RANKING_PTS, QUALIFYING_PTS); bSort2RPQP(robotTeamInfo, numTeamsInFile, TEAM_NUMBER, RANKING_PTS, QUALIFYING_PTS); System.out.println(); System.out.println("Data sorted by RP and QP with enhanced sort"); printTeamInfo(robotTeamInfo, numTeamsInFile, TEAM_NUMBER, RANKING_PTS, QUALIFYING_PTS); bSortQPonly(robotTeamInfo, numTeamsInFile, TEAM_NUMBER, RANKING_PTS, QUALIFYING_PTS); System.out.println(); System.out.println("Data sorted by QP only with simple sort"); printTeamInfo(robotTeamInfo, numTeamsInFile, TEAM_NUMBER, RANKING_PTS, QUALIFYING_PTS); bSortTNonly(robotTeamInfo, numTeamsInFile, TEAM_NUMBER, RANKING_PTS, QUALIFYING_PTS); System.out.println(); System.out.println("Data sorted by TN only with simple sort"); printTeamInfo(robotTeamInfo, numTeamsInFile, TEAM_NUMBER, RANKING_PTS, QUALIFYING_PTS); } public static File makeRandomTeamRPQPFile(File file, int maxLines, int rangeTeamNum, int rangeRP, int rangeQP) throws IOException { FileWriter fw = new FileWriter(file.getAbsoluteFile()); BufferedWriter bw = new BufferedWriter(fw); int teamNum, randRP, randQP; Random randGen = new Random(); //creating Random number generator for(int k = 0; k < maxLines; k++) { teamNum = randGen.nextInt(rangeTeamNum); randRP = randGen.nextInt(rangeRP); // notice that two values are being printed randQP = randGen.nextInt(rangeQP); bw.write(String.format("%8d%8d%8d", teamNum, randRP,randQP)); bw.newLine(); } bw.close();// be sure to close BufferedWriter return file; } public static int bSort2RPQP(Integer[][] robotTeamInfo, int numTeamsInFile, int TEAM_NUMBER, int RANKING_PTS, int QUALIFYING_PTS) { int index; int tempRP, tempQP, tempNum; int swap = 1; int numberOfCompares = numTeamsInFile-1; int j; for (j = 0; ((j < numTeamsInFile) && (swap > 0)); j++, numberOfCompares-- ) // don't elements already in order { System.out.println("At loop "+j+" swap is "+swap); swap = 0; for (index = 0; (index < numberOfCompares); index++ ) { // compare element i to i+1 if (robotTeamInfo[index][RANKING_PTS] < robotTeamInfo[index+1][RANKING_PTS]) { swap3(robotTeamInfo, index, TEAM_NUMBER, RANKING_PTS, QUALIFYING_PTS); swap++; } else if (robotTeamInfo[index][RANKING_PTS] == robotTeamInfo[index+1][RANKING_PTS]) { if (robotTeamInfo[index][QUALIFYING_PTS] < robotTeamInfo[index+1][QUALIFYING_PTS]) { swap3(robotTeamInfo, index, TEAM_NUMBER, RANKING_PTS, QUALIFYING_PTS); swap++; } } } } return j; } public static void printTeamInfo(Integer[][] robotTeamInfo, int numTeamsInFile, int TN, int RP, int QP) { int j; System.out.printf("%8s %5s %8s\n","Team #","RP","QP"); for (j = 0; (j < numTeamsInFile); j++ ) { System.out.printf("%8d %5d %8d\n", robotTeamInfo[j][TN], robotTeamInfo[j][RP], robotTeamInfo[j][QP]); // assume user gives good data } } public static int bSortQPonly(Integer[][] robotTeamInfo, int numTeamsInFile, int TEAM_NUMBER, int RANKING_PTS, int QUALIFYING_PTS) { int index; int tempRP, tempQP, tempNum; int swap = 1; int numberOfCompares = numTeamsInFile-1; int j; for (j = 0; (j < numTeamsInFile); j++) // don't elements already in order { //System.out.println("At loop "+j+" swap is "+swap); swap = 0; for (index = 0; (index < numberOfCompares); index++ ) { // compare element i to i+1 if (robotTeamInfo[index][QUALIFYING_PTS] < robotTeamInfo[index+1][QUALIFYING_PTS]) { swap3(robotTeamInfo, index, TEAM_NUMBER, RANKING_PTS, QUALIFYING_PTS); swap++; } } } return j; } public static int bSortTNonly(Integer[][] robotTeamInfo, int numTeamsInFile, int TEAM_NUMBER, int RANKING_PTS, int QUALIFYING_PTS) { int index; int tempRP, tempQP, tempNum; int swap = 1; int numberOfCompares = numTeamsInFile-1; int j; for (j = 0; (j < numTeamsInFile); j++) // don't elements already in order { //System.out.println("At loop "+j+" swap is "+swap); swap = 0; for (index = 0; (index < numberOfCompares); index++ ) { // compare element i to i+1 if (robotTeamInfo[index][TEAM_NUMBER] > robotTeamInfo[index+1][TEAM_NUMBER]) { swap3(robotTeamInfo, index, TEAM_NUMBER, RANKING_PTS, QUALIFYING_PTS); swap++; } } } return j; } public static void swap3(Integer[][] robotTeamInfo, int index, int TEAM_NUMBER, int RANKING_PTS, int QUALIFYING_PTS) { int tempRP, tempQP, tempNum; // int temp; tempRP = robotTeamInfo[index][RANKING_PTS]; robotTeamInfo[index][RANKING_PTS] = robotTeamInfo[index+1][RANKING_PTS]; robotTeamInfo[index+1][RANKING_PTS] = tempRP; tempQP = robotTeamInfo[index][QUALIFYING_PTS]; robotTeamInfo[index][QUALIFYING_PTS] = robotTeamInfo[index+1][QUALIFYING_PTS]; robotTeamInfo[index+1][QUALIFYING_PTS] = tempQP; tempNum = robotTeamInfo[index][TEAM_NUMBER]; robotTeamInfo[index][TEAM_NUMBER] = robotTeamInfo[index+1][TEAM_NUMBER]; robotTeamInfo[index+1][TEAM_NUMBER] = tempNum; } }